Содержание статьи
Народные мудрости
На базе Linux любят разворачивать NAS- и FTP-серверы. Для таких систем неплохо бы иметь резервную копию как минимум конфигурации, а в идеале еще и данных. Не стану читать очередную лекцию, насколько важно озаботиться резервным копированием до того, как с основным носителем информации приключится беда. Но повторю одну притчу из айтишного фольклора: люди делятся на тех, кто делает бэкапы, и тех, кто их еще не делает. С основами создания резервных копий ты можешь ознакомиться, например, в упомянутой статье, а мы не будем тратить время на теорию и сразу перейдем к делу.
WARNING
В одной статье всех существующих решений для резервного копирования не обозреть, поэтому мы рассмотрели и сравнили наиболее известные из них. Если тут нет твоей любимой программы — не обессудь.
Самое что ни на есть хардкорное резервное копирование данных с носителей можно выполнить командой dd. И самое прикольное, что можно примонтировать получившийся образ и работать с ним как с обычным разделом в режиме чтения и записи. Никаких тебе DAEMON Tools или Alcohol для эмулирования дисковода...

Подобные способы подкупают своей простотой и удобством создания резервной копии. К тому же не надо беспокоиться, что слетят права и прочие атрибуты файлов или испортятся символические ссылки. Еще можно примонтировать, например, Яндекс.Диск и сразу закидывать бэкапы на него. Но это кажется удобным лишь до поры до времени, пока не требуется ставить создание бэкапов на поток, а нужно лишь снять образ с флешки или диска. Для более серьезных задач в Linux уже существует достаточное количество утилит, делающих процесс резервного копирования с последующим восстановлением почти таким же простым (ну, после некоторой подготовки), как в винде или в macOS, поэтому вместо изобретения еще одного велосипеда давай-ка лучше изучим готовые.
Тем, кто любит помощнее
Ты гик или админишь что-то посложнее сети из двух с половиной хостов? Тогда специально для тебя мы рассмотрим сперва исконно линуксовые, сложные и не всегда понятные с первой попытки программы для создания бэкапов. Начнем, пожалуй, с классики.
rsync
Ходят легенды, что rsync, появившаяся в 1996-м и даже портированная в 1999-м на NT, была разработана для замены rcp (remote copy). А имя ее произошло от словосочетания remote synchronization, для чего она и была предназначена.
Утилита включена во все популярные дистрибутивы Linux; существуют версии для систем BSD, macOS и Windows. Эта свободная программа с интерфейсом командной строки предоставляет широкие возможности синхронизации локальных и удаленных файлов с использованием собственного алгоритма, уменьшающего объем пересылаемого трафика. Она применяется для создания зеркал и резервных копий — полных, инкрементных и при желании (вот один из гайдов) дифференциальных. Для автоматизации можно настроить расписание с помощью задач cron. При передаче на удаленные хосты rsync умеет использовать разный транспорт, в том числе rsh, SSH и сырые сокеты с собственным протоколом rsync. Можно указывать, какие файлы не следует синхронизировать, перечислив их имена, размер и не только; можно ограничивать скорость передачи данных и использовать множество других настроек.

Rsync позволяет создать демон, своего рода удаленный сервер rsync, который также можно сконфигурировать совершенно по-разному в зависимости от поставленной задачи. Он может принимать удаленные соединения анонимно, по паролю и без, с шифрованием по SSH на заданном порте с использованием ключей, с разными конфигурациями для разных пользователей, создаваемых в рамках rsync... При всем этом для успешного общения двух узлов демон rsync необязателен: разница между использованием демона и работой без него разъясняется на сайте проекта.
Опции настройки демона описаны в man rsyncd.conf, а примеры использования программы также представлены на сайте.
В мануале описано множество нюансов работы с этим мощным инструментом, таких как обработка символических ссылок и атрибутов файлов, опции удаления файлов при обновлении директорий, параметры пересылки данных и многое другое, что и в голову так просто не придет. В общем, в любой непонятной ситуации — RTFM!
luckyBackup
Графическая утилита, построенная на основе rsync. LuckyBackup умеет делать резервные копии и выполнять синхронизацию, работать с удаленными хостами и экономить трафик, передавая лишь изменения в данных, гибко настраивается (ну еще бы, ведь это потомок rsync). Внезапно (для меня) поддерживает русский интерфейс.
Для резервного копирования в luckyBackup создаются профили, внутри которых можно довольно тонко определить задачи:
- тип (бэкап или синхронизация) и описание задачи;
- правила копирования определенных директорий: настройка исключений по шаблонам, можно задать их самостоятельно или использовать имеющиеся; включений, которые должны быть обязательно скопированы;
- настроить использование удаленного узла в качестве источника или места назначения, с SSH или без;
- сохранение метаданных файлов, обработка ссылок и специальных файлов, в том числе по пользовательским шаблонам;
- команды оболочки, которые необходимо выполнить до или после исполнения задачи;
- можно просмотреть команду
rsync, которая будет запущена для выполнения созданной задачи.
Задачи можно включать или отключать, тыкая курсором мыши в чекбокс рядом с ее названием. Профили можно экспортировать (почему бы не забэкапить профиль программы бэкапа?). Контекстная справка при наведении курсора помогает простому смертному не затеряться в расширенных опциях.

Back In Time
Утилита с набором функций, очень похожим на luckyBackup. Тоже поддерживает профили, но экспортировать их нельзя, и внутри них нет задач — здесь профиль и есть задача.
Back In Time может использоваться в консольном или GUI-исполнении. Предлагает обычные или шифрованные EncFS копии, которые могут храниться локально или передаваться по SSH. Позволяет создавать бэкапы по дням и по часам, при включении компьютера и при подключении устройств, для чего использует cron или правила udev.
Можно настроить удаление старых бэкапов по их возрасту и количеству свободного места или инод (inodes). Да-да, иноды тоже могут закончиться, и тогда ты не сможешь создать файл, даже если есть место на диске. Вкладка Expert Options содержит набор расширенных опций для rsync. Бэкапы утилита сохраняет в виде архивов.

Bacula
Опенсорсный монстр для резервного копирования. Его можно собрать из исходников, однако готовые пакеты последних версий с сайта разработчиков просто так не получишь. Bacula обещает мощную функциональность — программа не в последнюю очередь ориентирована на работу в крупных компьютерных сетях и вообще на масштабирование; она умеет делать все три вида бэкапов. Имеются версии для Windows (есть даже клиент под Win98!), macOS и Open/NetBSD.
Bacula придерживается клиент-серверной архитектуры для организации хранения резервных копий, то есть подразумевает использование отдельного сервера, на который клиентские машины скидывают свои бэкапы. Тем не менее можно настроить ее так, чтобы она работала целиком на одном компьютере.
Bacula состоит из следующих компонентов:
- директора (Director), который централизованно следит за всеми операциями резервирования и восстановления;
- консоли (Console), с помощью которой пользователь управляет директором. Может использовать командную строку или GUI;
- файлового демона (File) — клиента, который устанавливается на клиентской машине и обменивается данными с директором;
- демона хранилища (Storage), состоящего из программ, заведующих хранением и управлением файлами бэкапов;
- каталога (Catalog), в котором хранятся данные о резервных копиях. Для него Bacula использует MySQL, PostgreSQL или SQLite;
- монитора (Monitor) для просмотра текущего состояния перечисленных компонентов.
Так что сделать резервную копию одной-единственной командой в случае с Bacula не получится. Для успешной работы всей системы бэкапа должны быть настроены директор, файловый демон, демон хранилища и каталог. Такая модульность позволяет гибко ее конфигурировать и даже разворачивать отдельные компоненты на разных серверах. Администрировать весь этот комбайн возможно через консоль или какую-либо графическую надстройку (например, Bacula Administration tool), но первоначально необходимо создать и отредактировать файлы конфигов основных компонентов.
Для более удобного просмотра статистики Bacula умельцы разработали инструмент Bacula-Web на базе PHP, но это не единственный веб-интерфейс, который можно прикрутить к Bacula.

Есть, однако, у Bacula и минусы — вся инфраструктура упадет при отказе директора. Плюс раньше при изменении в файле даже пары байтов она бэкапила весь файл, вместо того чтобы сохранить только дельту. В свое время из-за подобных вещей, а также из-за коммерциализации у Bacula появились форки:
- Burp (нет, это другой Burp, не Burp Suite). Его автору надоело, что Bacula такая большая и местами неповоротливая;
- Bareos. Парень из сообщества разработчиков Bacula стал собирать отклоненные правки и на их основе начал свою ветвь разработки.
duplicity
Это консольная утилита, построенная на базе librsync и поддерживающая полное и инкрементное копирование. Duplicity сохраняет данные в tar-архивах на удаленный или локальный файловый сервер и может использовать GnuPG для их подписи и шифрования. На сайте проекта указаны поддерживаемые на текущий момент протоколы для работы с файловым сервером, среди которых перечислены Dropbox, FTP, Google Drive, IMAP, MS Azure и Onedrive, rsync, SSH/SCP.

Duplicity предлагает следующие фичи:
- работу с правами и атрибутами файлов, символьными ссылками и файлами устройств, но жесткие ссылки считает за обычные файлы;
- исключения и включения для создания бэкапа, в том числе с регулярными выражениями;
- сравнение содержимого директории с ее резервной копией;
- логирование и восстановление к определенной дате;
- симметричное и асимметричное шифрование резервной копии перед отправкой на сервер. Не доверяешь облачному сервису? Этот вариант для тебя!
Здесь приведены, естественно, далеко не все возможности duplicity, но эта утилита имеет хорошую документацию с примерами, которая не оставит в беде неопытного юзера. Кроме того, к ней есть графический фронтенд Déjà Dup с ограниченным набором функций, но умеющий делать все самое необходимое. В системе он может называться Backups.

Когда хочется чего-нибудь попроще
Если ты настраиваешь резервное копирование для какой-нибудь домашней рабочей станции, то у тебя, наверное, нет особого желания ковыряться в дебрях мануалов rsync или возиться с развертыванием Bacula. В этом случае на помощь приходят Чип и Дейл несложные инструменты, которые тихо делают свое дело и не требуют слишком много мозгов времени на развертывание и настройку.
rsnapshot
Утилита, также разработанная на основе rsync, умеет делать инкрементные «снапшоты» файловой системы (а еще поддерживает LVM) и сохранять их на локальной или удаленной машине по протоколам SSH и rsync. На самом деле она создает простые файловые копии. Умеет работать с включениями и исключениями так же, как rsync, запускать скрипты до и после выполнения копирования. Для автоматизации задачи предлагается использовать cron.
Перед запуском утилиты необходимо настроить конфиг /etc/rsnapshot.conf. Все опции в нем хорошо прокомментированы, так что, если ты знаешь английский хотя бы на уровне чтения конфигов, проблем возникнуть не должно. Пример простейшей настройки с изменением лишь пары строк можно найти в этой статье (только теперь опцию interval заменила retain).

Если с момента прошлого бэкапа какие-то файлы не изменились, то rsnapshot в целевой директории просто создаст жесткие ссылки на такие файлы в предыдущем бэкапе. Кстати, она из коробки организует ротацию резервных копий согласно заданному в конфиге количеству одновременно хранящихся копий.

Разработчики предлагают немного мудреный раздел HOW-TO, посвященный тому, как восстановить файлы из бэкапа с правильным разграничением прав пользователей — специальной опции для этого в rsnapshot пока нет. То есть ты, скорее всего, резервную копию-то сделаешь, а корректным восстановлением из нее будешь заниматься уже «как-нибудь потом» или же просто воспользуешься cp. А вообще это неплохая консольная альтернатива с достойным арсеналом функций на случай, если тебе лень разбираться с ассортиментом ключей rsync.
rdiff-backup
Проект вдохновлен rsync и позволяет создавать инкрементные файловые копии. Rdiff-backup умеет сохранять бэкапы на локальной машине или в сети по SSH, но тогда на второй машине тоже должен быть установлен rdiff-backup. Для поддержки атрибутов файлов необходима дополнительная питоновская либа, но указывается, что с ними все равно могут возникнуть проблемы.
Восстановление можно выполнить с помощью ключа -r с указанием нужного бэкапа по точному времени его создания (в днях) или по номеру, считая от последнего бэкапа. По каждой сессии копирования тулза пишет файл статистики, из которого можно увидеть, например, сколько файлов появилось или было удалено с момента последнего копирования и сколько времени занял сам процесс.

Разработчик почему-то подчеркивает, что rdiff — это Reverse differential backup tool, то есть, в отличие от «обычного моющего средства», она может восстановить старый вариант файла, а не только самую последнюю версию. Это полезно, если ты случайно удалил часть документа и созданный после этого бэкап уже не содержит уничтоженных тобой данных. Хотя вообще-то не одна только эта программа позволяет так делать. Еще во всех отзывах, которые мне удалось найти, отмечается, что rdiff-backup работает заметно медленней в сравнении, например, с rsync и rsnapshot. Особенно когда из нескольких тысяч файлов были изменены пара сотен.
Backupninja
Это программа для централизованного управления утилитами резервного копирования, по сути обертка над их функциональностью. Базируется на duplicity и rdiff-backup, то есть с ее помощью можно делать зашифрованные и подписанные копии и передавать их по SSH. Также Backupninja умеет делать tar-архивы со сжатием или без, копии баз данных MySQL, PostgreSQL, OpenLDAP и subversion и писать копии на диски. Работает с Linux-VServer. Доступны исходники.
В комплекте с Backupninja поставляется ninjahelper — псевдографическая оболочка, в которой можно удобно и наглядно настраивать задания для резервного копирования, не тратя время и силы на изучение ключей разных утилит, хотя при наборе длинных путей программе явно не хватает автодополнения.

fwbackups
Графическая утилита с простым и понятным интерфейсом, в которой можно создавать «наборы резервирования» (Sets) — профили — и экспортировать их. Бэкап сохраняется в виде архива или файловой копии локально либо передается по SSH. Инкрементное копирование поддерживается только в случае файловых копий. Fwbackups умеет выполнять ротацию бэкапов и восстановление из них.
Можно указать в настройках расписания, в который час какого дня недели и месяца следует выполнять копирование, либо можно запустить его вручную. В расширенных опциях указываются команды, которые будут запущены до и после выполнения резервного копирования, а также исключения. Примечательно, что fwbackups позволяет выполнить разовую (One-Time Backup) копию без создания профиля.

И чем бэкапить?
Зависит от конкретной задачи. Большую часть типовых задач успешно решает rsync: это своего рода столп синхронизации и резервного копирования в Linux. На базе ее широчайших возможностей создаются другие приложения со своими особенностями: luckyBackup, rsnapshot, rdiff-backup и не только.
Хочешь все и сразу? Попробуй duplicity и Bacula. Duplicity нацелена изначально на создание защищенных копий, для чего применяет шифрование и цифровые подписи, но она не поддерживает жесткие ссылки. Bacula — это вообще целая инфраструктура, которую нет смысла разворачивать для резервирования данных с одного компа, если только тебе не хочется повозиться с настройками.
Все рассмотренные программы умеют работать с сетью, так что они как минимум подходят для организации резервного копирования в SOHO. Графические варианты позволяют настроить все еще быстрее.
В любом случае мануалов по перечисленному в обзоре софту предостаточно. Поэтому выбирай для каждой задачи подходящий инструмент, не забивай гвозди отверткой — и будет тебе счастье!










